<?php
	/**
	* Demo and tutorial of FormHelper Module
	* Written in Vietnamese Language
	* 
	* @author trungdt
	* @since Apr, 2012
	* @version 1.0
	* @copyright ABSoft Viet Nam
	* 
	* Change logs
	* 
	*/
	
	/**
	* Qui luật cần nhớ:
	* - page title, column title, toolbar và context menu có hỗ trợ tự nạp ngôn ngữ
	* - Qui tắc nạp ngôn ngữ:
	*    + Đặt ký tự _trước language key
	*    + Ví dụ: nếu ta đặt column title là edit_column thì formhelper sẽ hiểu là ta muốn đặt tên cột là edit_column
	*    + Nhưng nếu ta viết: _editcolumn thì formhelper sẽ hiểu tương đương với ta viết $_TR.editcolumn
	* 
	* - Lưu ý: nhớ tạo ngôn ngữ
	* 
	* - Dữ liệu nạp bằng kiểu manual (không dùng json), chỉ có thể nạp được khi dùng loại FORMHELPER_GRID_TYPE_DATAGRID, SetColumnType = 0
	*/
	
	if (!defined('EXPONENT')) exit('');
	
	// Bước 1: nạp Class formhelper vào bộ nhớ. 
	// Lưu ý: dùng require_one để điều khiển nạp một lần. Lần tiếp theo có gọi đến require_once thì PHP sẽ bỏ qua lệnh  này
	require_once(BASE."modules/formhelpermodule/formhelper.php");
	
	/* Bước 2: Khởi tạo đối tượng
	   Tham số 1: tên module của chúng ta. Ví dụ chúng ta đang làm phần quản lý category cho productsmodule, thì ta ghi như ví dụ
	   Tham số 2: views của chúng ta. Có thể nhập giá trị _unknown nếu chúng ta không dùng views. Tham số này dùng để tự động nạp ngôn ngữ
	   Tham số 3: title.
	   Tham số 4: location_data của chúng ta
	*/
	$formhelper=new formhelper("productsmodule","_categories_manager_title","_CategoriesManager",$loc);
	
	// Bước 3: Đặt loại của Grid. Có 2 loại là FORMHELPER_GRID_TYPE_TREEGRID và FORMHELPER_GRID_TYPE_DATAGRID. Mặc định là DataGrid
	$formhelper->setGridType(FORMHELPER_GRID_TYPE_DATAGRID);
	
	// Bước 4: cấu hình cho cái grid
	// Bạn có thể cấu hình bao nhiêu vào đây cũng được, tùy thích
	// có thể truyền vào mảng các cấu hình. Xem thêm trong code
	$formhelper->setGridOptions("height",300);
	
	// đặt ID của grid, ID này đại diện cho grid trên HTML
	$formhelper->setGridID("test_grid");
	// tên của hàm javascript mà chúng ta đã định nghĩa. hàm này sẽ được gọi khi grid đã nạp xong
	$formhelper->setInitCallback("TestGridCallback");
	
	// Bước 5: Nạp file javascript của chúng ta
	// Bạn có thể nạp bao nhiêu file js cũng được. 
	$js=THEME_RELATIVE."modules/productsmodule/js/CategoriesManager.js";
	$formhelper->addJS($js);
	
	/* Bước 6: Đặt loại của Column. 
	   Type = 0: Các cột sẽ được sinh ra từ HTML
	   Type = 1: Các cột sẽ được sinh ra từ JS. Cách này, ta dùng với json
	*/
	// add columns
	$formhelper->setColumnType(1);
	//$formhelper->addColumn(array("field"=>"id","title"=>"ID",'width'=>40,'formatter'=>"function(value){return \"<div style='text-align: center;'>\"+value+\"</div>\";}"));
	// Thêm cột vào. Các trường dữ liệu của cột theo định nghĩa của jQuery Easy UI
	$formhelper->addColumn(array("field"=>"seo_name","title"=>"Seo Name",'width'=>100));
	$formhelper->addColumn(array("field"=>"search_des","title"=>"Search Dest",'width'=>100));
	
	// Bước 7: Nếu dùng jSon, ta phải định nghĩa URL trỏ đến action lấy json
	$link_param=array();
	$link_param['module']="productsmodule";
	$link_param['action']="categories_getjson";
	$link_param['src']="@random4e8077b200225";
	$link_param['ajax_action']=1;
	$link_url= exponent_core_makeLink($link_param);
	// URL khi tạo ra sẽ có dạng giống thế này
	//$link_url="/index.php?module=productsmodule&action=categories_getjson&ajax_action=1&src=@random4e8077b200225";
	// thiết lặp URL
	$formhelper->setURLDataStream($link_url);
	$formhelper->setGridOptions("idField","id");
	$formhelper->setGridOptions("onBeforeLoad","function(___test_load");
	
	// Bước 8: cấu hình toolbar
	/**
	* Muốn cấu hình Toolbar thì ta có 2 cách
	*  - Cách 1: gọi phương thức addToolbarButtons. Phương thức này chỉ dùng để add các nút đơn giản
	*  - Cách 2: Tự sinh ra HTML sau đó gọi hàm addToolbarHTML để đưa toàn bộ HTML đó vào. Chỉ dùng khi nào ta có nhiều control phức tạp trên toolbar
	*/
	$formhelper->addToolbarButtons("_new_categories","add","__AB_PDoremi_CategoriesManager_Add('ProductsManager')");
	
	// context menu
	// Đây là ví dụ lời gọi hàm khi có sự kiện onContextMenu. Chúng ta đã định nghĩa trước hàm a_context trong file js của chúng ta. Nhưng để gọi được hàm, ta phải ghi là function(___a_context
	//$formhelper->setGridOptions("onContextMenu","function(___a_context");
	
	// Bước 9: Cấu hình context menu
	/**
	* Muốn cấu hình context menu thì ta có 2 cách
	*  - Cách 1: gọi phương thức addContextItem. Nêu dùng cách này
	*  - Cách 2: Tự sinh ra HTML sau đó gọi hàm addContextMenuHTML để đưa toàn bộ HTML đó vào. ít dùng
	*/
	$formhelper->addContextItem("_new_sub_categories","add","__AB_PDoremi_CategoriesManager_Add('ProductsManager')");
	
	// Bước 10: Thiết lập dữ liệu ban đầu
	// Lưu ý: Nếu dùng json thì khỏi làm bước này
	// bắt đầu mỗi dùng, ta tạo 1 object
	$data=null;
	$data->seo_name="Seo Name Value";
	$data->search_des="Search Des Value";
	// và chèn vào grid
	$formhelper->setData($data);
	
	// Bước 11: Xong, đi uống cafe
	// phân quyền
	$formhelper->register_permissions(array('administrate',"configure"),$loc);
	// đẩy xuống HTML
	$formhelper->output();
?>
